package com.auntvt.timo.jpax.core.quick.interfaces;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;

import java.util.List;
import java.util.Optional;

/**
 * 可通过链式调用Quick查询功能接口
 *
 * @author 小懒虫 <auntvt@163.com>
 * @date 2021/7/31
 */
public interface IChainQuick<T> {

    /**
     * 根据Quick构建的条件获取实体类对象
     *
     * @return 实体类对象
     */
    T get();

    /**
     * 根据Quick构建的条件获取实体类对象
     *
     * @return Optional对象
     */
    Optional<T> getOptional();

    /**
     * 根据Quick构建的条件获取数据
     *
     * @return 列表数据
     */
    List<T> lists();

    /**
     * 根据Quick构建的条件获取数据，并且进行排序
     *
     * @param sort 排序对象
     * @return 列表数据
     */
    List<T> lists(Sort sort);

    /**
     * 根据Quick构建的条件获取数据，并且进行分页
     *
     * @param pageable 分页配置对象
     * @return 分页数据
     */
    Page<T> pages(Pageable pageable);

    /**
     * 根据Quick构建的条件统计个数
     *
     * @return 数量
     */
    long count();
}
